;>FileSwitch log file

NRaine 10-Aug-1989  Created. Changes between 1.56 and 1.57 entered.
NRaine 21-Aug-1989  Changes between 1.57 and 1.58 entered.
NRaine  8-Sep-1989  Changes between 1.58 and 1.59 entered.
NRaine  8-Nov-1989  Changes between 1.59 and 1.63 entered.
NRaine  6-Dec-1989  Changes between 1.63 and 1.64 entered.
NRaine 23-Feb-1990  Changes between 1.64 and 1.65 entered.
JRoach 24-Jul-1990  Changes between 1.65 and 1.67 entered.
JRoach 24-Oct-1990  Changes between 1.67 and 1.70 entered.
JRoach 01-Nov-1990  Changes between 1.70 and 1.71 entered.
JRoach 18-Nov-1990  Changes between 1.71 and 1.72 entered.
JRoach 13-Feb-1991  Changes between 1.72 and 1.74 entered.
JRoach 18-Mar-1991  Changes between 1.74 and 1.75 entered.
JRoach 20-Mar-1991  Changes between 1.75 and 1.76 entered.
JRoach 16-Apr-1991  Changes between 1.76 and 1.77 entered.
JRoach 21-Apr-1991  Changes between 1.77 and 1.78 entered.
JRoach 21-Apr-1991  Changes between 1.78 and 1.79 entered.
JRoach 21-Apr-1991  Changes between 1.79 and 1.80 entered.
JRoach 30-Apr-1991  Changes between 1.80 and 1.81 entered.
JRoach 01-May-1991  Changes between 1.81 and 1.82 entered.
JRoach 07-May-1991  Changes between 1.82 and 1.83 entered.
JRoach 16-May-1991  Changes between 1.83 and 1.84 entered.
TDobson 27-Jan-1993 Changes between 2.08 and 2.09 entered.

How to load a new FileSwitch module
-----------------------------------

Because FileSwitch refuses to be killed while it is 'threaded', it is not
possible to load a new one in the middle of you !Boot file, since the
old FileSwitch must be active for the boot file to be open.

FileSwitch also has a habit of thinking it is always threaded after a while,
and so is normally only replaceable fairly soon after machine reset.

The answer is to put some stuff in your !Boot file that programs a soft key
to load a new copy of FileSwitch as follows:

    <rm> denotes the directory where your modules are kept

    $.!Boot:
        *Key 9 Run $.!Boot2|M
        *Set Key$9 Unset Alias$@*|MRMLoad <rm>.FileSwitch|M*ADFS|M<Key$9>
        *FX 138 0 137

    $.!Boot2:
        <loads other modules and performs normal boot sequence>

The !Boot file is normally an Obey or Command file which sets up soft key 9
and then inserts it in the keyboard buffer, so that FileSwitch can be
reloaded while the old one is not threaded.

Functionality Changes
---------------------

Version 1.57
 *  File$Type and Alias$@RunType variables set up for type &FEA (Desktop)
    files.
 *  Temporary (or current) filing system name is prepended onto the front of
    the filename passed to the Alias$@RunType or Alias$@LoadType decoder, if
    that filename does not have a filing system prefix already.  Note that
    the filename is initially constructed by searching down Run$Path and
    Load$Path, so any prefix could come from the path variable or the
    initial filename.
    Filenames supplied in Alias$@Load/RunType_xxx substitution have the
    temporary (or current) filing system name prefixed onto them if they do not
    already contain a filing system prefix (after Load/Run$Path lookup).

    This solves the problem with Obey files whereby if one was invoked using a
    command of the form:

            adfs::DiscName.$.App1.!Edit

    the "adfs:" would be treated as a temporary filing system name, and would be
    stripped off before the rest of the command was decoded.  As a result the
    value of Obey$Dir would be set to ":DiscName.$.App1.!Edit", and if the
    current filing system was not adfs, problems would occur!

    THE SOLUTION:

    After searching Run$Path or Load$Path (as appropriate), to find the file,
    FileSwitch then looks at the filetype to determine which Alias$@Run/LoadType
    variable to apply to it.

    The new fileswitch then prepends the filename derived from the path and the
    original name, and if this does not contain a filing system prefix, it puts
    the name of the temporary filing system (or the current filing system, if no
    temporary name was specified) on the front of the filename.

    This actually solves two problems:

     *  The first is the one described above, where Obey$Dir would only
        contain the filing system name if the command was preceded by "/" or
        "Run ".

     *  The second is the case of typing "net:fred", where "fred" is a file on
        the net, which is accessible via Run$Path (eg. if it is in the net
        library, and Run$Path = ",%.").

        On the old fileswitch this would have succeeded if "fred" was an
        absolute file (eg. a C program running at &8000), but would have failed
        if it was a BASIC program, since the Alias$@RunType_FFB substitution
        would have led to the command:

            BASIC -quit "%.fred"

        being executed, and by this time the filing system has reverted to adfs
        (or whatever it was before the command), so BASIC will not be able to
        find the file.


        The new FileSwitch fixes this because once the temporary filing system
        name is prefixed onto the filename, the command becomes:

            BASIC -quit "net:%.fred"


Version 1.58
 *  Filing system errors while writing buffers in OS_GBPB do not cause the
    data to be flushed, and do not cause 'Data lost' to be marked on that
    stream.
 *  Errors while flushing or closing a file DO cause the data buffers to be
    lost, and 'Data lost' to be marked on the stream, as do errors while
    flushing blocks in the heap to make room for others.
 *  Errors while doing direct user memory -> file transfer do not cause
    'Data lost' to be marked on the stream.

Version 1.59
 *  File$Type variables added: AF1, AFF, FF2, FF4
 *  Alias$@RunType variables added for DeskFS:$.Apps applications:
        AFF = DrawFile, FF2=Config, FF9=Sprite, FFF=Text
 *  Alias$@PrintType_AFF and Alias$@PrintType_FF9 set up

Version 1.60
 *  Issue fsfunc_LastFileClosed whenever there are no files left open on the
    tempfs after a call to CloseFile.

Version 1.61
 *  Look for foo$Path_Message variable when reporting "Filing system or path
    'foo:' not found", and replace the error message.

Version 1.62
 *  fsfunc_LastFileClosed feature removed (introduced in version 1.60).

Version 1.63
 *  Fixed OS_BPut - didn't properly check for scb_modified being unset.
 *  Bit 16 of fs info word set => this is a read-only filing system
 *  OS_FSControl (13) returns a pointer to the fs control block for a given
    filing system.  In the previous PRM it says that the format of this
    block is undefined: it is now defined that the block is word-aligned,
    has USR mode read access, and the word at offset 32 bytes from the start
    of this block is the filing system information word (as supplied in the
    fs info block).  Nothing else about the block is defined.

Version 1.64
 *  Set up Alias$@RunType_FFF and FF9 to use Wimp$State code variable

Version 1.65
 *  Remove all references to DeskFS: (now done by !Boot files)

Version 1.66
 *  Bug fix: OS_Find of a non-existent file via a path when there is no
                 current filing system caused an address exception.

Version 1.67
 *  Bug fix: OS_Args 3 (set extent) used to retain a buffer on the file
                 which was beyond the new end of file when the file was
                 truncated.

Version 1.68
 *  No change

Version 1.69
 *  No change

Version 1.70
 *  Implement MultiFS handling
 *  Reorganise to GET the sources rather than LNKing
 *  Sort out path variable handling
 *  Pull up cataloging and examining into FileSwitch
 *  Handle absolute directories in FileSwitch
 *  New interfaces:
           OS_FSControl 35 (register MultiFS)
           OS_FSControl 36 (deregister MultiFS)
           OS_FSControl 37 (canonicalise path)
           OS_FSControl 38 (FileInfo to Filetype)
           OS_FSControl 39 (Back TempFS)
           OS_FSControl 40 (URD)
           OS_Args 7 (read path)
           OS_File 20 (ReadWithType)
           OS_File 21 (ReadWithTypePath)
           OS_File 22 (ReadWithTypePathVar)
           OS_File 23 (ReadWithTypeNoPath)
           OS_GBPB 12 (Read dir entries with filetype)
 *  Fix bug whereby handles weren't claimed over an open.
 *  Directories and selected filing systems now stored with system variables.

Version 1.71
 *  Fix OS_File 6 (delete object) to delete without giving error.
 *  Fix OS_Find openout such that if the filing system returns any error
        during the create, then fileswitch will resort to using openout,
        rather than openup. This gets NFS#Printer: working.
 *  Fix OS_Find path handling when a path string was specified. This fixes a
        bug whereby the Risc OS make sequence gave bad name errors
        erroneously.
 *  Fix *Ex to correctly display the dates.
 *  Fix *Run and *Load to include the special field when constructing
        filetype specific command lines.
 *  Fix OS_FSControl rename to not complain when renaming to same thing (eg for change of case).
 *  Fix OS_FSControl rename to not address exception if got error checking destination.
 *  Fix TopPath_DoBusinessToPath to free all strings on error.
 *  Fix OS_FSControl rename to preserve r7 and r8 too.

Version 1.72
 *  Fix CanonicaliseSpecialAndDisc, and StringAbsolutePartsTogether to work
        properly with fsentry_func CanonicaliseSpecialAndDisc.
; *  Fix FSControl 37 (canonicalise path) to not have heap rot.
; *  Fix ResolveWildcard using fsentry_func resolvewildcard.

Version 1.73
 *  Fix int_DoLoadFile to ensure r3=0 on entry to low level to keep old NetFSs happy.

Version 1.74
 *  Fix RegisterMultiFS to copy filetype
 *  Fix directory handling to not stored unset directories and to fix *Dir functionality to be same as was.
 *  Add NoDir, NoURD and NoLib interfaces (commands and FSControl reasons).
 *  Fix *Dir without args to set Dir to &.
 *  Fix directory to Directory in Ex and Info and FileInfo
 *  Fix copy foo bah.* to do what it did before.
 *  Fix path processing to ignore errors on a path element basis - fixes %. on NFS when there's no current mount point, and fixes for <Font$Prefix> in Font$Path macro.
 *  Fix DeallocateStream to not free the containing stream (not checking before freeing scb_special).
 *  Fix DeallocateStream to remove deallocated stream from Image list if appropriate.
 *  Fix EnsureCanonicalObject to correctly handle openning a MultiFS file.
 *  Fix EnsureCanonicalObject to treat bad name errors as equivalent to file does not exist. This ensures images with long file names don't get accesses to them rejected.
 *  Fix RenameEntry to corectly update file name paths and correctly pass through the path tails to the low level rename.

Version 1.75
 *  Fix ReadDir's handling of multi-element (internally generated) stored directories.
 *  Fix ObtainAbsoluteParts to correctly handle the rejection of ReadDirs.

Version 1.76
 *  Add OSFile_ReadBlockSize
 *  Fix generation of Bad OSFile Op errors
 *  Add:
        FSControl_DefectList
        FSControl_AddDefect
        FSControl_ReadBootOption
        FSControl_WriteBootOption
        FSControl_UsedSpaceMap
        FSControl_ReadFreeSpace
 *  Partial internationalisation (Errors not internationalised yet).

Version 1.77
 *  Add error internationalisation
 *  Fix canonicalise special and disc handling of special field - r3 corruption.
 *  Fix handling of errors in Read and WriteBootOption.

Version 1.78
 *  Add code to UpCall for MultiFSs properly, and slick-up the low level
        interface routines to make assumptions about what interfaces will
        and won't be used.
 *  Insert ChkKernelVersion in init sequence.

Version 1.79
 *  Remove debugging code for release (oops!)

Version 1.80
 *  Fix #Arf:$ to work
 *  Fix *Back bug
 *  Fix handling of net#Arf:% to produce net#arf:%, not net#Arf:&
 *  Fix Ex/FileInfo/Info on files with load and execute addresses to be
        displayed to be displayed correctly.
 *  Fix NoLib and NoURD to barf when attempted to on understandsURDLibEtc FSs
 *  Add facility whereby special fields get passed through to path variables
        as FileSwitch$SpecialField
 *  Fix canonicalisation to remove .$. to . on non-handlesurdetc FSs.
 *  Add FSControl_NameDisc
 *  Remove directory filtering on Stamp/Settype.
 *  Add support for FSControl_StampImage
 *  Add support for OSArgs_ImageStampIs

Version 1.81
 *  Fix bug where having @=$ on non-NetFS filing systems gave bas name on *.
 *  Fix bug where having @=& on NetFS gave bad file name '' error on *.

Version 1.82
 *  Fix generation of appendstringtoerror errors
 *  Fix access entry to correctly barf on duff access values.
 *  Remove generation of Data lost errors - data is now never lost.
 *  Fix generation of EndOfFile error to translate it.

Version 1.83
 *  Add OS_FSControl ObjectAtOffset (52)
 *  Add *Configure Truncate
 *  Add Option part to catalogue header

Version 1.84
 *  Fix corruption of error pointer form *status filesystem
 *  Fix default for *Lib and OS_FSControl 1 to be &, as it was for FileCore
        in RO-2.00.
 *  Fix grammar error in *Configure Truncate help text.
 *  Fix Option part of catalogue header for old filing systems.
 *  Remove support for FSControl_CreateHandle, which was neither documented
        nor used.
 *  Remove the more obvious redundent code/data.
 *  Fix processing of paths to generate error whenever a missing path/filing
        system is found. So, for example, info daft:fred gives an error, if
        t$path is set to daft: *info t:fred gives Filing system or path
        'daft:' not present, and if daft$path_message is set to You've got
        to be daft to do that, you get the error You've got to be daft to do
        that when you try *info t:fred. The main point of the latter feature
        is for the case of !System not having been seen yet - a more useful
        error message can be displayed.
 *  Fix handling of OS_FSControl 11 to be RO-2.00 compatible.
 *  Fix generation of 'xxx' is a file errors to check for root object, and
        generate disc not understood - has it been formatted instead.
 *  Fix PoliceName to reject all absolute chars ($,@,&,%,\) rather than just
        $ so that a missing !boot didn't give a bad name error, but gave
        '&.!boot' does not exists instead.
 *  Fix (obscure) bug whereby if an OS_GBPB was made of a non-word size
        quantity from a non-word aligned address which ended at the end of
        readable memory, then FileSwitch would address exception as it tried
        to read the first unreadable word.
 *  Fix bug whereby MultiFSs were requested old-style for boot options.
 *  Fix bug in issuing of OSArgs_ImageEntryIs.
 *  Add SortSpecialForFSEntry for all new FSEntry_funcs.
 *  Removing setting of AF1 filetype variable.

Version 1.85
 *  Fix these entries to correctly find the relevant directories:
        FSControl_DefectList
        FSControl_AddDefect
        FSControl_ReadFreeSpace
        FSControl_UsedSpaceMap
        FSControl_NameDisc
        FSControl_ObjectAtOffset
 *  Fix verbose end of copy messages to correctly read n file[s] [moved/copied]
 *  Fix *Copy, *Wipe and *Count to handle partitions correctly:
        *Copy treats them as files
        *Wipe treats them as directories
        *Count treats them as directories
 *  Fix 'Aborted' to 'Abandoned' where appropriate.
 *  Fix bug whereby FSControl_StampImage wasn't passed through to
        non-MultiFS filing systems.
 *  Fix bug whereby CanonicaliseSpecialAndDisc was incorrectly handled at
        the lower levels of FileSwitch.
 *  Fix bug whereby FSControl_CanonicalisePath gave an address exception
        when asked to canonicalise a path of the form 'duff:fred'.
 *  Fix bug from stack inbalance when error gotten when trying to read boot
        option from old-style filing system.
 *  Fix bug such that old-style filing systems which didn't support *Dir or
        ReadDiscNameAndBootOption didn't manage to get catalogued.
 *  Fix bug where filing systems which couldn't handle resolving wildcards
        didn't get their wildcards resolved by FileSwitch either.
 *  Fix NameDisc to sort out internal data structures to follow the change
        in filenames which happens as a consequence.
 *  Fix NameDisc to inform the parent filing system of a MultiFS image,
        where appropriate, that the disc name has changed.

Version 1.86
 *  Respond to Service_DiscDismounted by unsetting directories on the
        relevant disc.
 *  Fix bug that when an error occured while FileSwitch was loading a file
        by OS_GBPB it left the file open - Xfer_ReadBytes corrupted the
        handle, but this wasn't accounted for in the load code.
 *  Install some code to reject special fields on filing systems which don't
        understand them.
 *  Fix save code to not create/open/GBPB/close on MulitFSs, but to save
        always. Anyway, there was a bug such that the close stamped the file
        (as expected), thus losing the specified load and execute address of
        the file - oops!
 *  Strip $. from paths passed to the filing systems. This should enable
        primitive podule support filing systems to work.
 *  When translating the results from fsfile_ReadCat translate anything but
        an object_file or object_directory when doing it to $ into
        object_directory. Translate error not found into object_nothing.
        Also generate bad file type error if bad type returned.
 *  Alter EnsureCanonicalObject to work from the leaf end of a path to the
        root when the object is not there. This reduces the number of
        lookups quite significantly in the case of an object being absent,
        but its directory present.
 *  Add doc.Services to document Service_CloseFile
 *  Respond to Service_CloseFile by closing unused partition files.
 *  Fix FSControl_ObjectAtOffset for MultiFS's to not give stupide reason code.
 *  Fix it so that renames and namediscs make the dirs follow them.
 *  Cause NothingToDelete error to be looked up before being returned.
 *  Fix the error propogation/capture during searches along a path to hide
        any but the last error. Thus 'not logged on' and 'drive empty' and
        other such errors will get propogated out of FileSwitch.
 *  Fix bug whereby wildcards on FileCore based filing systems weren't
        resolved properly - generating unusual error messages.

Version 1.87
 *  Enhance handling of NetFS-flavour filing systems to permit, for example
        net::disc.& and net::disc.%. net::disc on its own maps to net::disc.&.

Version 1.88
 *  Disable acceptance of nul filenames. Fixes !ABC bug.
 *  Fix error generated when an open file flavour of operation is done on an
        open directory to read '<the directory's name>' is a directory.
 *  Apply more paranoia about the lower level filing systems corrupting
        registers they shouldn't in their fsfunc entry point.
 *  Add support of fsinfo_dontusesave.
 *  Add support for fsfunc_DirIs
 *  Add support for fsinfo_giveaccessstring
 *  Fix bug where UpCall_ModifyingFile parameters were garbage.

Version 1.89
 *  Fix construction of run action command lines to base their names on the
        (r1,r6,fscb) triple as everywhere else does. Fixes ''adfs:' doesn't
        understand special fields' bug when running a text file from a DOSFS
        floppy which invokes !Edit.
 *  Adjust $-stripping algorithm as follows: If the path is sent to a normal
        (non-MultiFS) filing system which doesn't understand URD etc which
        is on FileSwitch's magic list of untrusted filing systems and the
        passed-in filename didn't have a $ in it then strip the $ from the
        filename before passing it to the filing system. (fixes arcdfs and
        others, hopefully!).
 *  In FSControl_CanonicalisePath don't look for the object except when
        necessary (eg when there's a wildcard or another element in a system
        path to look at). Solves name disc asking for the old named disc,
        and other bugs too.
 *  Issue Service_CloseFile before openning any file.

Version 1.90
 *  Fix handling of DOSFS discs in *Wipe, *Copy, *Count and *Access.
 *  Adjust Unset to "Unset".
 *  Fix bug where command lines whose filing system prefix stradles a
        256-byte boundary fail to execute.
 *  Fix handling of openalways filing systems. Problem was that $ was
        converted to existing directory, where the correct system would be
        to accept a missing thing as existing at appropriate times. This is
        the fix.
 *  Change default of net::disc to net::disc.$ rather than net::disc.&
 *  Add support for fsextra_FSDoesCat and fsextra_FSDoesEx
 *  Add FSControl_SetDir
 *  Extend fsfunc_DirIs to cover all directories, not just the CSD.
 *  Enable *Lib and *NoLib on NetFS-like filing systems.
 *  Move more messages into the global file.
 *  Ensure file gets close even if error writing contents during a *Save.
 *  Fix system heap rot in FileSwitch when it failed to find an object due
        to an error.
 *  Increase width for filename to 11 chars in catalogue displays.
 *  Put in cludge to reduce buffer size of GBPB read dir entries to cope
        with broken filing systems such as NFS.
 *  Fix bug whereby FileSwitch gave a wrong external handle to a filing
        system when doing an OPENOUT on a non-existant file.
 *  Extend FSControl_SetDir to allow unsetting of a dir.
 *  Fix bug whereby *Cat on a filing system which has just been killed gives
        an address excpetion.
 *  Fix directory defaulting for the new NetFS situation.
 *  TryGetFileClosed before deleting it. Ensure PC partitions get deleted.

Version 1.91
 *  Fix bug where if a nul string was supplied to
        FSControl_FileTypeFromString with r7 pointing somewhere stupid then
        an address exception would happen.

Version 1.92
 *  Tighten up PoliceName to reject 0-length disc names (bug been present
        since time emimorial.
 *  On error from registering a partition with an image filing system
        correctly tidy up and close the partition.
 *  Don't allow non-empty partitions to be deleted.

Version 1.93
 *  Fix BadComOption in messages file to BadComOpt.
 *  Add MenonFS to list of dudd filing systems.
 *  TryCloseFile before rename (enables partitions to be renamed).
 *  Fix OS_GBPB 12 to handle the case of 0 entries returned.
 *  Fix ResolveWildcardBySteam to not fail in the case that the wildcard
        being resolved doesn't appear in the first batch of names from the
        filing system.
 *  Fix heap rot in Sources.Canonical. Problem was some uses of SFreeArea
        thought thing to free was in r0, when, in fact, it's in r2.

Version 1.94
 *  Fix FSControl_ReadDir for NetFS.

Version 1.95
 *  Fix OS_GBPB read dir entries with file type to bodge the buffer size for
        NFS properly. Prevents headaches for !Patch.

Version 1.96
 *  Fix openning of MultiFS images to avoid recursion and handle failed
        openning properly.

Version 1.97
 *  Fix *Wipe to delete locked directories with force set reliably.

Version 1.98
 *  Fix OS_GBPB write bytes at file pointer such that it doesn't corrupt the
        file pointer when a 0 byte transfer is requested.

Version 1.99
 *  Fix bug whereby image filing systems would always fail to deregister.
 *  Fix bug whereby these commands: NoDir; NoURD; NoLib; Copy; Count; Wipe
        would all give address exceptions with a duff configured filing
        system.
 *  Fix check on writing to something hanging off a multi-part path to
        correctly reject this.
 *  Increase column width of the file name parts of *Cat and the such by 1
        to accomodate full width DOS names.
 *  Enable UpCall_ModifyingFile on OpenUp as well as OpenOut.
 *  Change bit for partition bad to avoid clash with data lost bit.
 *  Fix *Copy: prompt for destination to get destination disc name right;
        substitute media name and FS name correctly in the Ensure
        <fs>::<disc> message.
 *  Fix *Access: wildcard matching with multiple *s broken; access string
        now space-or-control-character-terminated rather than just control
        character terminated; UpCall 3,521 (*Access) ussued.
 *  Enable *Copy of a partition onto another partition - adjust position of
        TryGetFileCloseds to ensure this works smoothley.
 *  Enhance disabling of deletion of non-empty partitions to cope with
        brain-damaged filing systems which give the 'I have finished'
        indication when they've simply not had enough buffer for one entry.
 *  Internationalise case sensitivity.

Version 2.00
 *  Small bug fixes to cope cleanly with long system variables without
        giving exceptions (buffer overflows happen instead).
 *  Ensure the LowLevel errors get translated, and ensure the message file
        is open beforehand.
 *  Bring OS_File 19 up to Risc OS 2.00 standards.
 *  Correct FSDuf to FSDum in messages file.
 *  Fix fsfunc_ObjectAtOffset when used with partitions to correctly
        construct the prefix.
 *  Copy command line before doing Service_ and UpCall_ NewApplication to
        ensure get it before its destroyed (eg by Obey freeing the block
        containing it, or by FileSwitch loading an application over it!).

Version 2.01
 *  Remove all references to 'Access violation' - an error which wasn't
        used.
 *  Prevent erroneous comparison of filing system names against whatever
        happens to be at the end of image filing system control blocks -
        prevents one more source of address exceptions.
 *  Fix code in *Count when it verbosely skips a directory - RP-1008.
 *  Prevent R0 corruption by OS_FSControl 33 - RP-0909.
 *  Prevent r3 corruption by OS_FSControl 13 - RP-0908.
 *  Prevent r2 corruption by OS_Args 8 - RP-0907.
 *  Prevent application loading when they start in application area
        (&8000...MemoryLimit) and end after MemoryLimit with a 'No writeable
        memory at this address' error - RP-0548, RP-0061, A-RO-9372.
 *  Reject >10 character disc names in FSControl_NameDisc (as well as <2
        character disc names - G-RO-9777.
 *  Fix FileSwitch's side of NetFS *FileInfo - G-RO-9772.
 *  Simulate OS_GBPB 11 for partitions - G-RO-6799.

Version 2.02
 *  Canonicalise disc names for dudd old filing systems using *Dir and read
        disc names. Done specifically for CDFS - CD2-015, CD2-053.
 *  On error from OS_GBPB flavour load close file. Code was there before,
        but V set caused unexpected failure of the close sequence. RP-0902.
 *  Lookup CopyNowt where before it wasn't. RP-1265

Version 2.03
 *  Remove sexed quotes from messages file replacing with unsexed versions.
        RP-1271.
 *  Perform UpCall_ModifyingFile fsargs_EnsureSize as necessary G-RO-7162.
 *  Add code to prevent wildcards for delete and create G-RP-0009.
 *  Fix bug in bug fix for G-RO-6799 which caused partitions to come out
        wrong type.
 *  Fix soft die to die with all files closed and all filing systems
        deregistered. Fix soft init to FSRedeclare. G-RO-5512, RP-1614.
 *  Do OS_File 5 cacheing (2 second timeout). RP-0842
 *  Remove NFS cludge - its function is now taken by a patch to the NFS
        module RP-1460.
 *  Split error 'No %0 action for this....' into 'No run action...' and 'No
        load action...' RP-1478
 *  Only give '... - has it been formatted?' error on multifs extension
        filing systems RP-1686
 *  Don't try reading disc name from filing systems which can't cope with
        *Dir when canonicalising the disc name. RP-1685.

Version 2.04
 *  Fix bug in file 5 cacheing - it didn't correct the information after
        being altered due to an update operation. RP-0842
 *  Fix bug in picking up 'check for wildcards' flag G-RP-0009.

Version 2.05
 *  Change handling of partitions: deleting (*Delete and *Wipe) deletes
        whole partition in one go; *count counts partitions as one entity.
        A-RO-7007 and others.
 *  Don't mask off silly address bits when checking exec addressis within
        code when running an undated file. RP-1599.
 *  Fix all partition-requiring OS_FSControl calls to meet their spec with
        respect to how the partition is specified. The fault was that a file
        inside the partition couldn't be specified, but a directory could.
        RP-1959.
 *  Move writing of file length to filing system from close into flush so
        that flush flushes the file length too. RP-2009.
 *  Prohibit Wildcards in the leaf name of a Saves file's name. G-RP-0009.
 *  Prevent page remapping when trying to canonicalise a disc name for a
        duff old style filing system when a $-absent file name is quoted.
        RP-1781.

Version 2.06
 *  Revert StreamBits back to old form (removing changes for RP-2009). Done
        as the changes fixed nothing (RP-2009 ended up deferred in the light
        of implementation difficulties) and broke several things.

Version 2.07
 *  Correctly note down scb_modified when OpenOut performed on an already
        existing file. RP-2326 and RP-2328.
 *  Correct the error case of *Configure FileSystem gunge to generate an
        error rather than junk. G-RO-9782 (and RP-0222 (CJE Micros) RP-0402
        RP-0952  RP-2002 RO-8594).
 *  Alter canonicalisation of special and disc for old style filing systems
        to not attempt to canonicalise the disc name if a special field was
        supplied by the user. RP-2266.

Version2.08
 *  Fix bug whereby a Run$Path which goes <Long path>,<short path>,<Long
        path> would corrupt the system heap if the second long path were
        taken.
 *  Add SPSTFS: to list of incapable filing systems. Helps make Lingenuity's
        Snapshot board work.

Version 2.09
 *  Fix SFreeArea so it no longer assumes the RMA is below the system heap.
 *  Remove duplicate definition of fp.

Version 2.13
 *  OS_GBPB read dir entries allowed image file system to corrupt r2.

Version 2.15 (amg)
 *  Fix bug MED-01953. When SReadVariableToBuffer is called to read a variable
        which no longer exists it was failing to update the returned R1 (pointer
        to result). This usually failed silently, but a scenario arose where the
        R1 on OS_FSControl 19 was &4B534154 ==> no memory, which eventually found
        its way through to ReadFSName at which point things went horribly wrong.

Version 2.18 (SMC)
 * Fix for MED-00079: command help/syntax now looked up in messages file

Version 2.28 (MFC)
 *  Added support for 2048 byte buffers; in fact, the maximum permitted
        buffer size is determined by the variable Max_BuffSize, which is
        declared as equal to 2048 in hdr.LowFSI.

 *  Replaced calls to WriteI, WriteO and Newline by calls to DWriteI, DWriteO
        and DNewline in DebugStreamInfo in s.LowLevel: this corrects a bug
        in the debugging routines, and ensures that this debug output - when
        selected - is sent to its proper destination!

 *  Added support for "DebugIt" debugging to end of s.DebugOpts.
